package com.zzyq.pc.web.report.service;

import java.awt.Dimension;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import com.zzyq.pc.web.report.base.TableField;
import com.zzyq.pc.web.report.response.ModuleData;

public interface IDocExportor {

	/**
	 * 报告的名称字段
	 */
	String RPT_NAME = "RPT_TITLE";
	/**
	 * 组织名称字段
	 */
	String GAROUP_NAME = "GAROUP_NAME";
	/**
	 * 表格高度
	 */
	final float TABLE_HEIGHT = 25F;

	/**
	 * 根据数据解析后写入到PDF文档
	 * 
	 * @param infos
	 *            一些标题注释信息等
	 * @param moduleDatas
	 *            排序的模块数据，包括标题等信息
	 * @param svg
	 *            有图表的svg字符串，根据模块信息里的标题取出，并生成图片插入word
	 * @param out
	 *            word的输出流对象
	 * @return
	 */
	IDocExportor createDoc(Map<String, String> infos, List<ModuleData> moduleDatas, Map<String, String> svg,
			OutputStream out);

	/**
	 * 将文件写到流中
	 * 
	 * @param out
	 */
	void writeToStream() throws Exception;

	/**
	 * 写入表格信息
	 * 
	 * @param fields
	 *            对表格的字段描述
	 * @param dataJson
	 *            数据json字符串
	 * @param isPullByList
	 *            是否以普通列表方式排列
	 * @param rowSize
	 *            行数
	 */
	void writeTable(List<TableField> fields, String dataJson, boolean isPullByList, int rowSize) throws Exception;

	/**
	 * 写入文字列表
	 * 
	 * @param fields
	 *            样式描述
	 * @param dataJson
	 *            数据Json字符串
	 */
	void writeTextList(List<TableField> fields, String dataJson) throws Exception;

	/**
	 * 写入图片
	 * 
	 * @param inputStream
	 * @param size
	 * @param align
	 *            显示位置，左中右，使用
	 *            {@link com.zingrow.web.report.utils.WordDocExportor.Align}
	 */
	void writeImage(byte[] bytes, Dimension size, Align align) throws Exception;

	/**
	 * 写入标题
	 * 
	 * @param text
	 *            需要被写入展示的标题文本
	 * @param font
	 *            字体和大小,使用
	 *            {@link com.zingrow.web.report.utils.WordDocExportor.DocFont}
	 * @param align
	 *            显示位置，左中右，使用
	 *            {@link com.zingrow.web.report.utils.WordDocExportor.Align}
	 */
	void writeText(String text, DocFont font, Align align) throws Exception;

	void writeLine() throws Exception;

	/**
	 * 内容/图/表格显示位置
	 */
	enum Align {
		Right, Center, Left
	}

	enum DocFont {
		TitleDoc("Microsoft YaHei", 22, true), TitleModule("Microsoft YaHei", 12, true), Content("Microsoft YaHei", 12,
				false);
		private String font;
		private Integer size;
		private Boolean bold;

		private DocFont(String font, Integer size, Boolean bold) {
			this.font = font;
			this.size = size;
			this.bold = bold;
		}

		public String getFont() {
			return font;
		}

		public void setFont(String font) {
			this.font = font;
		}

		public Integer getSize() {
			return size;
		}

		public void setSize(Integer size) {
			this.size = size;
		}

		public Boolean getBold() {
			return bold;
		}

		public void setBold(Boolean bold) {
			this.bold = bold;
		}

	}
}
